Software analysis for unauthorized purposes is old. Since the personal computer came of age, and perhaps even before that time, hackers and crackers have been analyzing software to subvert the software writer's goals. In one well-known scenario, dynamic software tracing (tracing the logic flow of a program as the program executes) has been used to determine which values or registers need to be adjusted to allow full functioning of a program. Patches or hacks (small and usually unauthorized programs designed to work with only one specific application) are then written to ensure that those values or registers provide the correct values. Similarly, the program may also be hacked by amending the source code to allow unrestricted access to the program.
These and other similar methods based on analyzing a program's source code may be used for purposes that range from the benign to the malicious. Software may be analyzed to allow hackers to develop ways to circumvent a copy protection scheme, cheat at game programs, or defeat requirements for hardware security checks. Similarly, such analysis may be used to allow hackers to defeat anti-virus software, software based firewalls, or to gain access to restricted functions or databases.
The basis for such attacks on software stems from the fact that most software decisions are based on mathematical operations and comparisons. As such, if the true nature of these operations and comparisons can be hidden in the code such that it is more difficult to analyze the code, hackers may be deterred from trying such attacks. Or, if they are not deterred from trying such measures, hackers may find the analysis too tedious or convoluted to succeed.
Based on the above, there is therefore a need for systems and methods that can obfuscate, hide, disguise, or otherwise conceal the true nature of mathematical operations and comparisons in software.